/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/* 
 * File:   CSwitchBase.h
 * Author: Administrator
 *
 * Created on 2017年11月22日, 下午6:01
 */

#ifndef CSWITCHBASE_H
#    define CSWITCHBASE_H
#include"PublicTool.h"
typedef struct _ifTableInfo{
char        ifDescr[32];//端口缩写
uint32_t    ifCrc32;//ifDescr的校验码
char        rrdpath[256];//rrd路径
time_t      timestamp;//时间戳
struct {
char        ifFullDescr[256];//端口全描述
char        ifAlias[256];//自定义描述
char        ifName[256];//ifName
char        ifTypeDescr[64];//端口类型描述
uint16_t    ifMtu;//传输包最大字节
uint32_t    ifHighSpeed;//
uint32_t    ifLastChange;//上次更新时间
uint32_t    ifCounterDiscontinuityTime;//
uint16_t 	ifType;//端口类型ID
uint8_t     ifConnectorPresent;
uint8_t 	ifAdminStatus;
uint8_t 	ifOperStatus;
char 		ifPhysAddress[18];//物理地址
}sys;
struct {
uint64_t    ifHCInOctets;//64位入流量
uint64_t    ifHCOutOctets;//64位出流量
double      ifInFlow;//网卡入带宽
double      ifOutFlow;//网卡出带宽
time_t      iftimestamp;//网卡带宽时间戳
}octets;
}ifTableInfo;
typedef std::map<uint32_t,ifTableInfo>MAPIFTABLEINFO;
class CSwitchifTable {
    std::string     m_ip;//交换机IP
    MAPIFTABLEINFO  m_ifTable;//网卡数据
    char m_rrddir[256];//rrd存储路径
    char m_flowtable[256];//带宽表名
    int  m_initok;//是否初始化成功
    char*m_createsql;//初始化表语句
public:
    CSwitchifTable(std::string ip);
    virtual ~CSwitchifTable();
//通过SNMP采集网卡信息    
    void UpDateifTable();
//更新指定范围内的带宽    
#if 0    
    void UpDateifFlowAll(time_t starttime,time_t endtime);
#endif    
//将带宽数据存储到指定rrd文件
#if USE_PUBLIC_TOOL    
    void CreateRRDTool(const char*ifDescr,const char*rrdname,time_t starttime,time_t endtime);
#endif    
//获取交换机端口信息
static  MAPIFTABLEINFO GetAllSwitchPortList(const char*IP);
private:
//上传网卡信息到数据库    
    void UpLoadifTable();
//上传网卡流量信息到数据库 
#if 0    
    void UpLoadifOctets(void*mysqlptr);
#endif    
//更新一次带宽信息
#if 0    
    void UpdateifFlow(time_t checktime,void*mysqlptr);
#endif    
};

#endif /* CSWITCHBASE_H */

